#include <windows.h> 
#pragma once

//This code is from Q243953 in case you lose the article and wonder
//where this code came from.
class CLimitSingleInstance
{
protected:
	DWORD  m_dwLastError;
	HANDLE m_hMutex;

public:
	inline CLimitSingleInstance( TCHAR *strMutexName )
	{
		//Make sure that you use a name that is unique for this application otherwise
		//two apps may think they are the same if they are using same name for
		//3rd parm to CreateMutex
		m_hMutex = ::CreateMutex( NULL, FALSE, strMutexName ); //do early
		m_dwLastError = GetLastError(); //save for use later...
	}

	inline ~CLimitSingleInstance()
	{
		if( m_hMutex )  //Do not forget to close handles.
		{
			::CloseHandle( m_hMutex ); //Do as late as possible.
			m_hMutex = NULL; //Good habit to be in.
		}
	}

	inline bool isAnotherInstanceRunning()
	{
		return ( ERROR_ALREADY_EXISTS == m_dwLastError );
	}
};